// 手写递归深拷贝
users = [
  { id: 1, name: '张三' ,hometown:'北京'},
  { id: 2, name: '李四' ,hometown:'上海'},
  { id: 3, name: '王五' ,hometown:'广州'}
];

function deepClone(obj, hash = new WeakMap()) {
  // 处理 null 和非对象类型
  if (obj === null || typeof obj !== "object") return obj;

  // 防止循环引用
  if (hash.has(obj)) return hash.get(obj);

  // 处理 Date
  if (obj instanceof Date) return new Date(obj);

  // 处理 RegExp
  if (obj instanceof RegExp) return new RegExp(obj.source, obj.flags);

  // 处理 Array 和 Object
  const cloned = Array.isArray(obj) ? [] : {};

  // 记录引用，防止循环
  hash.set(obj, cloned);

  // 递归拷贝所有属性（包括 Symbol）
  Reflect.ownKeys(obj).forEach(key => {
    cloned[key] = deepClone(obj[key], hash);
  });

  return cloned;
}
const data = deepClone(users);
data[0]['hobbies'] = ['篮球','足球','跑步'];
console.log(data, users);
